﻿#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>
#include <stdlib.h>

//动态内存开辟常见的错误
//1. 对NULL指针的解引用操作
//2. 对动态开辟空间的越界访问
//3. 使用free释放非动态开辟的空间
//4. 使用free释放动态内存中的一部分
//5. 对同一块动态开辟的空间，多次释放
//6. 动态开辟的空间忘记释放-  内存泄漏 - 比较严重的

//void test()
//{
//	int* p = (int*)malloc(100);
//	if (p == NULL)
//	{
//		return;
//	}
//	//使用
//}
//
//int main()
//{
//	test();
//	//....
//	return 0;
//}

//int main()
//{
//	int* p = (int*)malloc(100);
//	//使用
//	//释放
//	free(p);
//	p = NULL;
//
//	//释放
//	free(p);
//	return 0;
//}

//int main()
//{
//	int* p = malloc(10 * sizeof(int));
//	if (p == NULL)
//	{
//		return 1;
//	}
//	int i = 0;
//
//	for (i = 0; i < 5; i++)
//	{
//		*p++ = i;
//	}
//	
//	free(p);
//	p = NULL;
//
//	return 0;
//}

//int main()
//{
//	int arr[10] = { 0 };//栈区
//	int* p = arr;
//	//使用
//	
//	free(p);//使用free释放非动态开辟的空间
//	p = NULL;
//
//	return 0;
//}
//int main()
//{
//	int*p = (int*)malloc(1000000000);
//	//对malloc函数的返回值，做判断
//	int i = 0;
//	for (i = 0; i < 10; i++)
//	{
//		*(p + i) = i;
//	}
//
//	return 0;
//}
//
//int main()
//{
//	int* p = (int*)malloc(10 * sizeof(int));
//	if (p == NULL)
//	{
//		return 1;
//	}
//	int i = 0;
//	//越界访问
//	for (i = 0; i < 40; i++)
//	{
//		*(p + i) = i;
//	}
//	
//	free(p);
//	p = NULL;
//	return 0;
//}



